Здесь я познакомплю вас со скриптами (или скриптовыми командами?), которые сделают вашу жизнь значительно проще, надеюсь. Да на мейкере многое можно провернуть через ивенты и стандартные команды, но порой они бывают невероятно мудреными и громозскими. А бывает что некоторые, казалось бы, простые фичи вообще нельзя реализовать используя стандартные функции.
Предисловие: сначала я хотел выбрать самые полезные скрипты, но потом подумал "если у меня не хватило воображения чтобы применить их, это не значит что у других его не хватит!" Так что отчасти это будет копипаст с этого топика с русскими комментариями.
Сообщения:
СпойлерТекст:
$game_message.face_name = 'fName' - название файла изображения актера
$game_message.face_index = fIndex - индекс изображения актера 0-7
$game_message.background = fBG - фон обычный(0), темный(1), прозрачный(2)
$game_message.position = fPos - позиция верх(0), середина(1), низ(2)
$game_message.add("Текст")
СпойлерВвод цифр:
$game_message.num_input_variable_id = x - ID переменной в которую запишется ввод
$game_message.num_input_digits_max = y - количество символов для ввода
СпойлерКлючевой предмет:
$game_message.item_choice_variable_id = x - ID переменной для записи
СпойлерПрокрутка текста:
$game_message.scroll_mode = true - стиль сообщения (true - прокрутка текста, false - обычное сообщение)
$game_message.scroll_speed = x - скорость
$game_message.scroll_no_fast = false - можно пропустить (true - нельзя, false - можно)
$game_message.add("Текст") - строка текста
Герои:
СпойлерИзменить ХП/МП:
Вот тут на забугорском сайте приводится довольно сложный пример, который я упростил.
Меняем ХП $game_actors[n].hp += x и меняем МП $game_actors[n].mp += x, где n - ID героя, x - значение на
которое сменить. В данном случае x прибавляется к текущему ХП/МП, но += можно заменить на -=, /=
, *= и даже на =. Однако выше максимального значения вам их не поднять!
Для всей партии используется
$game_party.members.each { |actor| actor.hp += x } и $game_party.members.each { |actor| actor.hp += x }
СпойлерСостояния:
Добавить
$game_actors[id].add_state(state_id), где state_id - ID состояния
Убрать
$game_actors[id].remove_state(state_id), где state_id - ID состояния
Для группы соответственно
$game_party.members.each { |actor| actor.add_state(state_id) }
$game_party.members.each { |actor| actor.remove_state(state_id) }
СпойлерПолное восстановление:
$game_actors[n].recover_all, где n - ID героя
Для группы
$game_party.members.each { |actor| actor.recover_all }
СпойлерОпыт:
$game_actors[n].change_exp(x, show), где n - ID героя, x - значение опыта, show - true/false показывает или не показывает сообщение о повышении уровня. Здесь значение только присваивается, а не прибавляется к текущему опыту героя.
Для группы
$game_party.members.each { |actor| actor.change_exp(x, show) }, тоже самое, но можно заменить x на
actor.exp + x, тогда опыт будет прибавляться к текущему значению.
СпойлерПараметры:
$game_actors[n].add_param(p, +/-x), где n - ID героя, x - значение параметра, p - ID параметра (0=MHP,
1=MMP, 2=ATK, 3=DEF, 4=MAT, 5=MDF, 6=AGI, 7=LUK)
Для группы
$game_party.members.each { |actor| actor.add_param(p, +/-x) }
СпойлерНавыки:
$game_actors[n].learn_skill(s) - узнать навык
$game_actors[n].forget_skill(s) - забыть навык
где n - ID героя, s - ID навыка
Для группы
$game_party.members.each { |actor| actor.learn_skill(s) }
$game_party.members.each { |actor| actor.forget_skill(s) }
СпойлерЭкипировка:
$game_actors[n].change_equip_by_id(v, e), где n - ID героя, v - слот (0=weapon, 1=shield, 2=head, 3=body,
4=accessory), e - ID предмета Предмет должен быть в инвентаре!
СпойлерИмя:
$game_actors[n].name = "текст", где n - ID героя
СпойлерКласс:
$game_actors[n].change_class(c), где n - ID героя, c - ID класса
СпойлерПрозвище:
$game_actors[n].nickname = "Текст", где n - ID героя
СпойлерЗолото:
$game_party.gain_gold(x) - дать x золота (если значение отрицательно, то работает как lose)
$game_party.lose_gold(x) - забрать х золота (если значение отрицательно, то работает как gain)
СпойлерПредметы:
n - ID предмета, х - количество (работает так же как и золото)
$game_party.gain_item($data_items[n], x) - дать
$game_party.lose_item($data_items[n], x) забрать
Для оружия и брони заменить items на weapons и armors соответственно
СпойлерПартия:
n - ID героя, p - позиция (0 - лидер)
$game_party.add_actor(n) - добавить
$game_party.remove_actor(n) - убрать
$game_party.remove_actor($game_party.members[p].id) - убрать героя с определенной позиции
Игровой процесс:
СпойлерПеременные:
Переменные легко задавать через стандартные методы, но как записать в переменную слово? А вот как.
$game_variables[n] = 'text', где n-номер переменной, а text-собственно текст. Можно использовать для паролей, храня их в переменных, а не в именах героев или записать в переменные, например, окончания слов. Тогда можно будет сделать различное обращение к персонажам мужского и женского пола.
СпойлерПереключатели:
Свитчи, точнее селф (локальные) свитчи. Стандартными методами вы можете включать и выключать селф свитчи только в самом событии, но не из других событий менять их невозможно и приходиться использовать кучу общих переключателей, захламляя базу. Но вот так можно обойтись и без них.
$game_self_switches[[map, event, 'N']] = value, где map-ID карты, event-ID эвента, N- A-D
При этом вы можете использовать @map_id-получает ID карты на которой вы находитесь и @event.id-получает ID эвента который использует скрипт.
Обычный свитч $game_switches[n] = true/false, где n его номер
СпойлерТаймер:
$game_timer.start(sec * Graphics.frame_rate) - запуск, где sec время действия в секундах
$game_timer.stop - остановка
СпойлерУсловие:
# Стандартное условие
if что-то происходит
# делай дело
else
# делай дело
end
# Ветвление условий, если у вас много вариантов
if что-то происходит
# делай это
elsif что-то еще происходит
# делай дело
elsif снова что-то происходит
# делай дело
elsif и опять
# делай дело
end
СпойлерОбщее событие:
$game_temp.reserve_common_event(x) - x-ID события
Движение:
СпойлерПеремещение игрока:
$game_temp.fade_type = fade
$game_player.reserve_transfer(map_id, x, y, direction)
Где fade изменение экрана = 0 черный, 1 белый, 2 без изменения
map_id, x, y - ID карты и координаты куда переместить
direction - направление [0] запомнить, [2] вниз, [4] влево, [6] вправо, [8] вверх
СпойлерТранспорт:
Преместить
$game_map.vehicles[n].set_location(map_id, x, y)
n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль
map_id, x, y - ID карты и координаты куда переместить
Получить данные о транспорте
$game_map.vehicles[n].x
$game_map.vehicles[n].y
n - тип транспорта 0 лодка, 1 корабль, 2 дирижабль
СпойлерПеремещение события/игрока:
$game_map.events[n].moveto(x, y) - для ивента
$game_player.moveto(x, y) - для игрока (работает как $game_player.reserve_transfer(@map_id, x, y, 0))
n - ID события
x, y - новые координаты
СпойлерДвижение камеры:
$game_map.start_scroll(direction, distance, speed)
direction - направление [2] вниз, [4] влево, [6] вправо, [8] вверх
distance - дистанция в квадратах мейкера
speed - скорость [1] 1/8, [2] 1/4, [3] 1/2, [4] 1, [5] х2, [6] х4
СпойлерЗайти/Выйти из транспорта:
$game_player.get_on_off_vehicle = true/false
СпойлерОжидание:
Ожидание для перемещения
SceneManager.scene.wait(x), x - сколько кадров ждать
Ожидания для остального
x.times { Fiber.yield }, x - сколько кадров ждать
Картинки и погода:
СпойлерПоказать картинку:
screen.pictures[index].show(name, position, x, y, x zoom, y zoom, opacity, blend type)
index - индекс картинки
name - имя файла
позиция - position = [0] по краю, [1] по центру
x, y - координаты
x zoom, y zoom - увеличение по x, y = масштаб
opacity - прозрачность, для непрозрачности ставится 255
смешивание - blend type = [0] обычное, [1] добавление, [2] замещение
СпойлерДвигать картинку:
screen.pictures[index].move(position, x, y, x zoom, y zoom, opacity, blend type, wait)
index - индекс картинки
position(позиция) = [0] по краю, [1] по центру
x, y - координаты
x zoom, y zoom - увеличение по x, y = масштаб
opacity - прозрачность, для непрозрачности ставится 255
blend type(смешивание) = [0] обычное, [1] добавление, [2] замещение
wait - продолжительность движения, в кадрах
СпойлерВращать картинку:
screen.pictures[index].rotate(s)
index - индекс картинки
s - скорость вращения
СпойлерОттенок картинки:
screen.pictures[index].start_tone_change(Tone.new(0, 0, 0, 0), wait)
index - индекс картинки
Тон задается так же как и в окне, задаем вместо нулей
wait - время ожидания в кадрах
СпойлерУдалить картинку:
Для событий на карте
screen.pictures[index].erase
index - индекс картинки
СпойлерПогодные эффекты:
$game_map.screen.change_weather(type, power, time)
type(тип) = :none, :rain, :storm, :snow
power(сила) - сила с которой будет идти погода
time(время) - как быстро сменится погода, в кадрах
По умолчанию сила не модет быть больше 10, но чем больше число, тем темнее экран, а больше 30 экран уже
$game_player.followers.gather - все сопартийцы переходят в позицию игрока
СпойлерПоказать анимацию:
Для персонажа
$game_player.animation_id = n
Для события
$game_map.events[event_id].animation_id = n
event_id - ID события
n - ID анимации
СпойлерПоказать эмоцию:
Для персонажа
$game_player.balloon_id = n
Для события
$game_map.events[event_id].balloon_id = n
event_id - ID события
n - номер анимации от 1 до 10
СпойлерУдалить событие:
$game_map.events[event_id].erase
event_id - ID события
Экран:
СпойлерСкрыть/Показать экран:
Скрыть: screen.start_fadeout(n)
Показать: screen.start_fadein(n)
n - длительность, в кадрах
СпойлерЦвет экрана:
$game_map.screen.start_tone_change(Tone.new(255, 0, 0, 0), wait)
Тон задается так же как и в окне, задаем вместо нулей
wait - время ожидания в кадрах
СпойлерВспышка:
screen.start_flash(Color.new(0,0,0,power), wait)
Цвет задается так же как и в окне, задаем вместо нулей
power - сила вспышки (прозрачность)
wait - время ожидания в кадрах
СпойлерТряска:
$game_map.screen.start_shake(power, speed, duration)
power - сила тряски
speed - скорость
duration - время действия
По умолчанию сила и скорость в мейкере выше 9.
Музыка:
СпойлерПроиграть BGM/ME/BGS/SE:
RPG::BGM.new("BGM Name", volume, pitch).play
RPG::ME.new("ME Name", volume, pitch).play
RPG::BGS.new("BGS Name", volume, pitch).play
RPG::SE.new("SE Name", volume, pitch).play
Name - имя файла
volume - громкость
pitch - темп
Проиграть BGM карты
$game_map.autoplay
Проиграть BGM битвы
BattleManager.play_battle_bgm
Проиграть ME победы
BattleManager.play_battle_end_me
СпойлерСохранить/Вернуть/Остановить:
Сохранить BGM
$game_system.save_bgm
Сохранить BGM и BGS
BattleManager.save_bgm_and_bgs
Возобновить BGM
$game_system.replay_bgm
Возобновить BGM и BGS
BattleManager.replay_bgm_and_bgs
Заглушить BGM/BGS/ME
RPG::BGM.fade(time)
RPG::BGS.fade(time)
RPG::ME.fade(time)
где time - время в кадрах
Остановить BGM/BGS/ME/SE
RPG::BGM.stop
RPG::BGS.stop
RPG::ME.stop
RPG::SE.stop
troop_id - ID группы врагов
esc - возможен ли побег true/false
cont - продолжать после проигрыша true/false
СпойлерМагазин:
goods = [[type, id, price_flag(, price)]]
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
type - тип предмета [0] вещи, [1] оружие, [2] броня
id - ID предмета
price_flag - флаг новой цены 0 если нет, 1 если есть
price - своя цена, если флаг 1
Например:
goods = [[0,1,1,25],[0,2,0]] #первым в списке будет вещь с id 1 по новой цене 25, второй будет вещь с id 2 по цене из бд
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
Можно использовать массив
goods = []
for id in 1..20
goods.push([0, id, 0])
end
СпойлерВвод имени:
SceneManager.call(Scene_Name)
SceneManager.scene.prepare(id, long)
Fiber.yield
id - ID персонажа, которому нужно ввести имя
long - длинна имени
СпойлерВызов сцен:
SceneManager.call(Scene_Save) - сохранение
SceneManager.call(Scene_Load) - загрузка
SceneManager.exit - выход
SceneManager.call(Scene_Gameover) - конец игры
Вот так можно вызвать любую сцену из списка в скриптах
SceneManager.call(scene)
scene - нужная вам сцена ( Scene_Menu, Scene_Item и так далее)
Карта:
СпойлерПоказ имени карты:
$game_map.name_display = true/false
СпойлерВыбор тайлсета:
$game_map.change_tileset(n)
n - ID тайлсета
СпойлерВыбрать фон битвы:
$game_map.change_battleback("battleback1", "battleback2")
battleback1 и battleback2 - названия файлов без расширения
СпойлерВыбрать параллакс:
$game_map.change_parallax("name", Loop_Hor, Loop_Ver, HScroll, VScroll)
name - названия файла без расширения
Loop_Hor, Loop_Ver - зацикленная прокрутка по горизонтали и вертикали true/false
HScroll, VScroll - скорость автоматической прокрутки
СпойлерИнформация:
Координаты игрока
$game_player.x
$game_player.y
Координаты события
$game_map.events[event_id].x
$game_map.events[event_id].y
event_id - ID события
Тег территории
$game_map.terrain_tag(x, y) - по координатам
$game_player.terrain_tag - по местоположению игрока
$game_map.events[event_id].terrain_tag - по местоположению события
event_id - ID события
Регион
$game_map.region_id(x, y) - по координатам
$game_player.region_id - по местоположению игрока
$game_map.events[event_id].region_id - по местоположению события
event_id - ID события
Карта
$game_map.name - имя карты
$game_map.map_id - ID карты
Видит ли игрок событие
$game_map.events[event_id].near_the_player?
event_id - ID события
Принимает значение true/false если игрок в пределах 20 квадратов
Сведения о событии
$game_map.events[event_id].direction - направление события
$game_map.event_id_xy(x, y) - id события по координатам
СпойлерВыбрать графику:
Для игрока
$game_actors[actor_id].set_graphic("char_name", char_index, "face_name", face_index)
$game_player.refresh
actor_id - ID персонажа
char_name - имя файла графики, без расширения
char_index - индекс графики, начиная с 0
face_name - имя файла лица, без расширения
face_index - индекс лица, начиная с 0
Для события
$game_map.events[event_id].set_graphic("char_name", char_index)
event_id - ID события
char_name - имя файла графики, без расширения
char_index - индекс графики, начиная с 0
Дополнение:
СпойлерИнструменты:
Очистить карту от эффектов/тона/вспышки/тряски/погоды/картинки
$game_map.screen.clear
Очитить моментально
$game_map.screen.clear_tone/shake/weather/pictures
СпойлерКнопки:
К сожалению я так и не понял чем эти команды отличаются
Input.trigger?(:A)
Input.repeat?(:A)
Input.press?(:A)
СпойлерДебагинг:
Моментально использовать предмет, независимо от его наличия
$game_actors[n].use_item($data_items[x]) - предмет x для персонажа с ID n
$game_party.leader.use_item($data_items[x]) - предмет x лидера отряда
$game_party.members[n].use_item($data_items[x]) - предмет x для члена партии с n по счету (лидер всегда 0)
Узнать размер партии
$game_party.members.size
или
$game_party.all_members.size
Проверка доступа
$game_actors[X].equips.include?($data_weapons[Y]) - надето ли на персонажа X орудие Y
$game_actors[X].equips.include?($data_armors[Y]) - надето ли на персонажа X броня Y
$game_actors[X].skills.include?($data_skills[Y]) - изучен ли у персонажа X навык Y
$game_actors[X].states.include?($data_states[Y]) - висит ли на персонаже X эффект Y
Получить Имя/Прозвище, ID класса, класс
$game_actors[X].name - возвращает имя
$game_actors[X].nickname - возвращает прозвище
$game_actors[X].class.id - возвращает ID класса
$game_actors[X].class.name - возвращает имя класса
Последний раз редактировалось Paranoid; 13.04.2017 в 15:07.
Лицензионный VX Ace. Спасибо Петр.
2 года мукеризма в пустую.
Социальные закладки